#!/bin/bash
# 设置Python虚拟环境脚本
# 使用方法：
# 1. chmod +x setup_venv.sh
# 2. 普通创建: ./setup_venv.sh
# 3. 更新版本: ./setup_venv.sh --update
# 4. 创建Python 3.13.7环境: ./setup_venv.sh --python313

# 设置环境变量
env_name=".venv"
requirements_file="requirements.txt"

# 解析命令行参数
update_mode=false
python313_mode=false
for arg in "$@"
do
    case $arg in
        --update)
            update_mode=true
            shift
            ;;
        --python313)
            python313_mode=true
            shift
            ;;
        *)
            shift
            ;;
    esac
done

# 列出可用的Python版本并获取用户选择
select_python_version() {
    echo "正在检测可用的Python版本..."
    available_pythons=()
    # 查找常见的Python版本
    for version in $(ls -1 /usr/bin/python* 2>/dev/null | grep -E 'python[0-9.]+$' | sort -V -r); do
        if [[ $version == *"config"* ]]; then
            continue
        fi
        # 获取版本号
        ver=$($version --version 2>&1 | cut -d ' ' -f 2)
        # 只选择Python 3.7或更高版本
        major=$(echo $ver | cut -d '.' -f 1)
        minor=$(echo $ver | cut -d '.' -f 2)
        if [ $major -ge 3 ] && [ $minor -ge 7 ]; then
            available_pythons+=("$ver ($version)")
        fi
done
    
    if [ ${#available_pythons[@]} -eq 0 ]; then
        echo "错误: 未找到Python 3.7或更高版本，请先安装较新的Python版本"
        exit 1
    fi
    
    echo "可用的Python版本："
    select opt in "${available_pythons[@]}"
    do
        if [ -n "$opt" ]; then
            selected_python=$(echo $opt | cut -d ' ' -f 2)
            selected_version=$(echo $opt | cut -d ' ' -f 1)
            echo "已选择Python版本: $selected_version"
            break
        fi
    done
}

# 检查是否安装了Python
if ! command -v python3 &> /dev/null
then
    echo "错误: 未找到Python 3，请先安装Python 3"
    exit 1
fi

# 如果是Python 3.13.7模式
if [ "$python313_mode" = true ]
then
    if [ -d "$env_name" ]
    then
        echo "正在删除旧的虚拟环境: $env_name"
        rm -rf "$env_name"
    fi
    
    # 直接使用Python 3.13.7
    selected_python="/usr/local/bin/python3.13"
    echo "正在使用Python 3.13.7创建虚拟环境"
    
    # 检查Python 3.13.7是否存在
    if [ ! -f "$selected_python" ]
    then
        echo "错误: 未找到Python 3.13.7可执行文件在 $selected_python"
        exit 1
    fi

# 如果是更新模式，删除旧的虚拟环境
elif [ "$update_mode" = true ]
then
    if [ -d "$env_name" ]
    then
        echo "正在删除旧的虚拟环境: $env_name"
        rm -rf "$env_name"
    fi
    
    # 让用户选择Python版本
    select_python_version
else
    # 使用默认Python版本
    selected_python="python3"
    python_version=$(python3 --version 2>&1 | cut -d ' ' -f 2)
    major_version=$(echo $python_version | cut -d '.' -f 1)
    minor_version=$(echo $python_version | cut -d '.' -f 2)
    
    if [ $major_version -lt 3 ] || ([ $major_version -eq 3 ] && [ $minor_version -lt 7 ])
    then
        echo "警告: Python版本为 $python_version，项目推荐使用Python 3.7或更高版本"
        echo "提示: 您可以使用 ./setup_venv.sh --update 来选择较新的Python版本"
        echo "提示: 您可以使用 ./setup_venv.sh --python313 来直接创建Python 3.13.7环境"
    fi
fi

# 创建虚拟环境
if [ ! -d "$env_name" ]
then
    echo "正在创建虚拟环境: $env_name 使用 $selected_python"
    $selected_python -m venv $env_name
    if [ $? -ne 0 ]
    then
        echo "错误: 创建虚拟环境失败"
        exit 1
    fi
    echo "虚拟环境创建成功"
else
    echo "虚拟环境 $env_name 已存在"
fi

# 激活虚拟环境的命令
activate_command="source $env_name/bin/activate"

# 打印使用指南
cat << EOF

Python虚拟环境设置完成！

使用指南:
1. 激活虚拟环境:
   $activate_command

2. 安装项目依赖:
   pip install -r $requirements_file

3. 运行项目:
   python run_data_fusion.py

4. 退出虚拟环境:
   deactivate

注意事项:
- 每次运行项目前请先激活虚拟环境
- 如果需要重新安装依赖，请先激活虚拟环境，然后执行 pip install -r $requirements_file
- 如果虚拟环境出现问题，可以删除 $env_name 目录后重新运行本脚本
EOF